package com.chen.unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class ListTest1 {
    public static void main(String[] args) {
        // java.util.ConcurrentModificationException 并发修改异常
        // List<String> list = new ArrayList<>();// 不安全

        // 解决方案1：Vector。synchronized修饰的add()方法，效率低，不合适。
        // 解决方案2：Collections.synchronizedList。synchronized，定义了一个对象mutex作为同步监视器
        // 解决方案3：CopyOnWriteArrayList。里面的数组用transient、volatile关键字修饰
        List<String> list = new CopyOnWriteArrayList<>();

        for (int i = 1; i <= 50; i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString().substring(0, 5));
                System.out.println(list);
            }, String.valueOf(i)).start();
        }
    }
}
